home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Light ROM 3
/
Light ROM 3 - Disc 2.iso
/
programs
/
amiga
/
amicdrom
/
3
/
amicdrom.lha
/
AmiCDROM
/
cdcontrol.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-01-07
|
5KB
|
200 lines
/* cdcontrol.c:
*
* Control program for the AmiCDROM handler.
*
* ----------------------------------------------------------------------
* This code is (C) Copyright 1993,1994 by Frank Munkert.
* All rights reserved.
* This software may be freely distributed and redistributed for
* non-commercial purposes, provided this notice is included.
*/
#include <stdlib.h>
#include <stdio.h>
#include <clib/dos_protos.h>
#include <clib/exec_protos.h>
#include <clib/utility_protos.h>
#include <exec/memory.h>
#ifdef AZTEC_C
#include <pragmas/dos_lib.h>
#include <pragmas/exec_lib.h>
#include <pragmas/utility_lib.h>
#endif
#ifdef LATTICE
#include <pragmas/dos_pragmas.h>
#include <pragmas/exec_pragmas.h>
#include <pragmas/utility_pragmas.h>
extern struct Library *DOSBase;
#endif
#include "cdcontrol.h"
struct Library *UtilityBase = NULL;
struct MsgPort *g_device_proc;
enum partype {
PAR_NONE,
PAR_ANY,
PAR_ON_OFF
};
void Cleanup (void)
{
if (UtilityBase)
CloseLibrary (UtilityBase);
}
void Send_Packet (int p_cmd, void *p_1, void *p_2)
{
struct MsgPort *replyport = CreateMsgPort ();
struct StandardPacket *packet = AllocMem (sizeof (struct StandardPacket),
MEMF_CLEAR | MEMF_PUBLIC);
long res1, res2;
if (!packet || !replyport) {
fprintf (stderr, "ERROR: cannot send packet\n");
exit (1);
}
packet->sp_Msg.mn_Node.ln_Name = (char *) &(packet->sp_Pkt);
packet->sp_Pkt.dp_Link = &(packet->sp_Msg);
packet->sp_Pkt.dp_Port = replyport;
packet->sp_Pkt.dp_Type = ACTION_USER;
packet->sp_Pkt.dp_Arg1 = p_cmd;
packet->sp_Pkt.dp_Arg2 = (ULONG) p_1;
packet->sp_Pkt.dp_Arg3 = (ULONG) p_2;
PutMsg (g_device_proc, (struct Message *) packet);
WaitPort (replyport);
GetMsg (replyport);
res1 = packet->sp_Pkt.dp_Res1;
res2 = packet->sp_Pkt.dp_Res2;
if (res1 == 0)
PrintFault (res2, (UBYTE *) "ERROR");
FreeMem (packet, sizeof (struct StandardPacket));
DeleteMsgPort (replyport);
}
void Cmd_Lowercase (void *p_1, void *p_2)
{
Send_Packet (CDCMD_LOWERCASE, p_1, p_2);
}
void Cmd_Mactoiso (void *p_1, void *p_2)
{
Send_Packet (CDCMD_MACTOISO, p_1, p_2);
}
void Cmd_Convertspaces (void *p_1, void *p_2)
{
Send_Packet (CDCMD_CONVERTSPACES, p_1, p_2);
}
void Cmd_Showversion (void *p_1, void *p_2)
{
Send_Packet (CDCMD_SHOWVERSION, p_1, p_2);
}
void Cmd_Hfsfirst (void *p_1, void *p_2)
{
Send_Packet (CDCMD_HFSFIRST, p_1, p_2);
}
void Cmd_Dataext (void *p_1, void *p_2)
{
Send_Packet (CDCMD_DATAEXT, p_1, p_2);
}
void Cmd_Resourceext (void *p_1, void *p_2)
{
Send_Packet (CDCMD_RESOURCEEXT, p_1, p_2);
}
struct par {
char *name;
char *abbrev;
enum partype par1;
enum partype par2;
void (*func)(void *, void *);
} g_par[] = {
"lowercase", "l", PAR_ON_OFF, PAR_NONE, Cmd_Lowercase,
"mactoiso", "mi", PAR_ON_OFF, PAR_NONE, Cmd_Mactoiso,
"convertspaces", "cs", PAR_ON_OFF, PAR_NONE, Cmd_Convertspaces,
"showversion", "sv", PAR_ON_OFF, PAR_NONE, Cmd_Showversion,
"hfsfirst", "hf", PAR_ON_OFF, PAR_NONE, Cmd_Hfsfirst,
"dataext", "de", PAR_ANY, PAR_NONE, Cmd_Dataext,
"resourceext", "re", PAR_ANY, PAR_NONE, Cmd_Resourceext,
};
void Usage (void)
{
printf (
"Usage: cdcontrol device command\n"
" Commands & parameters Abbrev. Meaning\n"
" --------------------- ------- -------\n"
" lowercase [on/off] l Convert ISO filenames to lowercase\n"
" mactoiso [on/off] mi Convert Mac to Amiga characters\n"
" convertspaces [on/off] cs Convert HFS spaces into underscores\n"
" showversion [on/off] sv Show version number of ISO filenames\n"
" hfsfirst [on/off] hf Look for a HFS partition first\n"
" dataext <extension> de Set extension for HFS data forks\n"
" resourceext <extension> re Set extension for HFS resource forks\n"
"Examples:\n"
" cdcontrol cd0: showversion on\n"
" cdcontrol cd0: sv on\n"
);
exit (1);
}
void main (int argc, char *argv[])
{
int i;
atexit (Cleanup);
if (argc != 4)
Usage ();
if (!(UtilityBase = (struct Library *)
OpenLibrary ((UBYTE *) "utility.library", 37))) {
fprintf (stderr, "cannot open utility.library\n");
exit (1);
}
g_device_proc = DeviceProc ((UBYTE *) argv[1]);
if (!g_device_proc) {
fprintf (stderr, "ERROR: cannot find device \"%s\"\n", argv[1]);
exit (1);
}
for (i=0; i < (sizeof (g_par) / sizeof (struct par)); i++) {
if (Stricmp ((UBYTE *) argv[2], (UBYTE *) g_par[i].name) == 0 ||
Stricmp ((UBYTE *) argv[2], (UBYTE *) g_par[i].abbrev) == 0) {
void *a = argv[3];
void *b = NULL;
if (g_par[i].par1 == PAR_ON_OFF)
if (Stricmp ((UBYTE *) argv[3], (UBYTE *) "on") == 0)
a = (void *) 1;
else if (Stricmp ((UBYTE *) argv[3], (UBYTE *) "off") == 0)
a = (void *) 0;
else {
fprintf (stderr, "ERROR: \"on\" or \"off\" expected\n");
exit (1);
}
g_par[i].func (a, b);
exit (0);
}
}
Usage ();
}